package com.ntd.study.algorithm.sort.impl;

import com.ntd.study.algorithm.sort.Sort;

import java.util.function.BiFunction;

/**
 * 选择排序
 *
 * @author liuwenju
 * @date 2021/4/16
 */
public class SortSelect<T> implements Sort<T> {

    /**
     * 选择排序
     * @param arrays 排序数组
     * @return
     */
    @Override
    public T[] sort(T[] arrays, BiFunction<T, T, Boolean> sort) {
        for (int i = 0; i < arrays.length - 1; i++) { // 每次循环将最小值放到最前面
            int minIndex = i;
            for (int i1 = i + 1; i1 < arrays.length; i1++) { // 遍历确定最小值
                if(sort.apply(arrays[minIndex], arrays[i1])) {
                    minIndex = i1;
                }
            }
            T temp = arrays[i];
            arrays[i] = arrays[minIndex];
            arrays[minIndex] = temp;
        }
        return arrays;
    }
}
